package com.hualan.sfzy.interceptor;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hualan.sfzy.constant.SystemCode;
import com.hualan.sfzy.utils.Result;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * springmvc中的拦截器
 * 1.编写代码：实现拦截器接口 HandlerInterceptor
 * 2.配置拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 控制器方法执行之前执行preHandle()，其boolean类型的返回值表示是否拦截或放行
     *      返回true为放行，即调用控制器方法；返回false表示拦截，即不调用控制器方法；
     *
     * @param request  请求对象
     * @param response 响应对象
     * @param handler  请求将要执行的Controller对象
     * @return 布尔类型：
     *      true表示请求放行，继续向后执行（有可能进入下一个拦截器，也有可能进入Controller）
     *      false表示拦截请求，请求不能继续向后执行
     */
    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUserInfo");
        if(loginUser != null){
            return true;
        }
        response.setContentType("application/json;charset=utf-8");
        ObjectMapper mapper = new ObjectMapper();
        String string = mapper.writeValueAsString(Result.error(SystemCode.NOT_LOGIN.getCode(), SystemCode.NOT_LOGIN.getMessage(), null));
        response.getWriter().write(string);
        return false;
    }

}